package com.bjsxt.chapter1_singleton;

import java.io.ObjectStreamException;
import java.io.Serializable;

/**
 * @ClassName SingletonDemo6
 * @Description 懒汉式单例模式，如何防止反射和反序列化的漏洞
 * @Author 黑马程序员
 * @Date 18:07 2024/6/18
 * @Version 1.0
 **/
public class SingletonDemo6 implements Serializable {
    // 类初始化时，不初始化这个对象(延时加载，真正用的时候再创建)。
    private static SingletonDemo6 instance;

    // 私有构造器
    private SingletonDemo6(){
        if (instance != null){
            throw new RuntimeException("对象已经存在!");
        }
    }

    // 方法同步，调用效率低！
    public static synchronized SingletonDemo6 getInstance(){
        if (instance == null){
            instance = new SingletonDemo6();
        }
        return instance;
    }

    // 反序列化时，如果定义了readResolve()方法则直接返回此方法指定的对象，而不再单独创建新对象!
    private Object readResolve() throws ObjectStreamException{
        return instance;
    }
}
